Materi ini diproduksi oleh tim dari Algoritma untuk Memperkenalkan data geospasial untuk keperluan visualisasi tidak hanya 2D melainkan 3D. Materi berikut hanya ditujukan untuk kalangan terbatas, meliputi individu/personal yang menerima materi ini secara langsung dari lembaga pelatihan. Materi ini dilarang untuk direproduksi, didistribusikan, diterjemahkan, atau diadaptasikan dalam bentuk apapun di luar izin dari individu dan organisasi yang berkepentingan.

Algoritma adalah pusat pendidikan Data Science di Jakarta. Kami mengadakan workshop dan program pelatihan untuk membantu para profesional dan pelajar untuk mendapatkan keahlian dalam berbagai bidang dalam ruang lingkup Data Science: data visualization, machine learning, data modeling, statistical inference, dan lain-lainnya.

Sebelum masuk ke dalam materi dan menjalankan kode-kode di dalam materi ini, silakan anda melihat bagian Library/Packages Preparation untuk melihat dan memastikan semua persyaratan dasar untuk mengikuti materi ini sudah terpenuhi termasuk package-package yang diperlukan. Pada bagian Tujuan Pembelajaran anda dapat melihat secara umum apa saja yang akan dipelajari dalam modul materi ini. Kami harap materi ini akan bermanfaat bagi karir ataupun menambah keahlian peserta.

1 Preface

1.1 Pendahuluan

Dalam era digital dan informasi yang terus berkembang, data geospasial menjadi sangat penting dalam berbagai bidang seperti pemetaan, pemodelan lingkungan, analisis berbasis lokasi, pengambilan keputusan bisnis, dan pemantauan geografis. Penggunaan data geospasial yang efektif membutuhkan keterampilan analisis dan visualisasi yang kuat, serta pemahaman tentang bahasa pemrograman yang dapat memanipulasi dan memproses data geospasial dengan efisien. Pelatihan Geospasial Visualisasi menggunakan bahasa pemrograman R ini dirancang untuk memperkenalkan peserta dengan alat-alat dan teknik yang diperlukan untuk menganalisis dan memvisualisasikan data geospasial menggunakan bahasa pemrograman R. R merupakan bahasa pemrograman yang populer di kalangan ilmuwan data dan analis statistik, dan telah menjadi salah satu pilihan lain dalam analisis dan visualisasi data geospasial selain menggunakan tools khusus pengolahan data GIS.

Dalam pelatihan ini, peserta akan belajar tentang dasar-dasar pemrograman R, termasuk struktur data, fungsi, dan manipulasi data. Peserta akan diperkenalkan dengan library-library R yang berguna untuk memanipulasi dan memproses data geospasial, seperti sf, terra, sp, leaflet, hingga library untuk visualisasi 3D yakni rayshader. Peserta akan mempelajari bagaimana mengimpor data geospasial dari berbagai format seperti shapefile, raster, dan data spasial lainnya, serta melakukan manipulasi dan transformasi data geospasial menggunakan R.

Selain itu, peserta akan dilibatkan dalam pembelajaran mengenai visualisasi data geospasial menggunakan grafik, peta, dan animasi dalam bahasa R. Peserta pelatihan akan mendapatkan pemahaman yang solid tentang analisis dan visualisasi data geospasial menggunakan bahasa pemrograman R. Mereka akan dapat mengaplikasikan keterampilan yang diperoleh dalam berbagai proyek yang melibatkan data geospasial, baik itu dalam akademik, penelitian, maupun lingkungan bisnis. Karena, untuk memahami apa yang akan divisualisasikan perlu adanya pemahaman dasar mengenai dasar-dasar geospasial agar tidak terjadi salah representasi.Sehigga, dengan menguasai keterampilan analisis dan visualisasi geospasial menggunakan bahasa pemrograman R, peserta pelatihan akan memiliki keunggulan kompetitif dalam memahami dan memanfaatkan data geospasial untuk pengambilan keputusan yang lebih baik, pemodelan yang lebih akurat, dan pemecahan masalah yang lebih efektif dalam konteks geografis.

Terdapat banyak alat yang tersedia untuk memvisualisasikan informasi geografis; mulai dari aplikasi GIS (Sistem Informasi Geografis) penuh seperti ArcGIS dan QGIS, hingga alat berbasis web seperti Google Maps hingga berbagai bahasa pemrograman. Dengan beragam paket yang tersedia, penggunaan R untuk analisis geospasial semakin populer. Mulai dari statistik geospasial, pemodelan, dan visualisasi, IDE RStudio juga membuat R menjadi alat yang ramah pengguna untuk pembuatan peta dan analisis.

1.2 Tujuan Pembelajaran

Tujuan utama dari workshop ini adalah untuk memberikan pengenalan yang komprehensif mengenai tools dan perangkat lunak yang digunakan untuk menganalisa dan melakukan visualisasi data geospatial dengan sebuah aplikasi open-source populer: R. Selain menggunakan tools khusus GIS yang mana perlu pemahaman dari segi aplikasi yang digunakan serta fungsi dari tools-tools yang digunakan. Adapun materi ini akan mencakup:

Introductory Module:

  • Dasar Bahasa Pemrograman R
    • Pengenalan bahasa pemrograman R
    • Bekerja dengan RStudio
    • Fungsi standar pada R
    • Data manipulasi dan persiapan data menggunakan R dplyr
  • Data Wrangling dan visualisasi dengan R
    • Bekerja dengan data tabular di R: Tips dan Teknik
    • Data Wrangling dan Agregasi
    • Pengenalan untuk visualisasi dengan ggplot2

Main Module: - Introduction to Geospatial Data - Data Spasial:
- Data Vektor -> Introduction to Manipulation Data - Data Raster -> Introduction to Manipulation Data - Representasi sederhana

  • Reading and Writing spatial data
    • File Vektor
    • File Raster
  • Sistem Koordinat Referensi
    • Coordinate Reference Systems (CRS)
      • Angular coordinates
      • Projections
    • Assigning a CRS
    • Transforming vector data
    • Transforming raster data
  • Membuat Peta Interaktif
    • Pengenalan tentang Peta Interaktif
    • Menggunakan Leaflet
    • Membuat Peta Tematik Interaktif
  • Membuat Peta 3D dengan Rayshader
    • Pengenalan tentang Pustaka Rayshader
    • Memahami Konsep Pemetaan Topografis
    • Membangun Peta 3D dari Data Topografis Spatial.

1.3 Library dan Setup

Untuk dapat mengikuti materi ini, peserta diharapkan sudah menginstall beberapa packages di bawah ini. Apabila package tersebut belum terinstall, silahkan jalankan chunk atau baris kode berikut. Apabila sudah ter-install, lewati chunk berikut dan muat package yang dibutuhkan dengan menjalankan chunk selanjutnya.

## DO NOT RUN CHUNK
# packages <- c("readr", "readxl", "stringr","dplyr", "rgdal","sf", "maps", "leaflet", "raster", "osmdata", "ggplot2", "terra")

# install.packages(packages)
# Data Cleaning
library(readxl) # untuk membaca data excel
library(readr) # untuk membaca data
library(stringr) # untuk persiapan data text
library(dplyr) # untuk data manipulation

# Data Visualization
library(leaflet) # untuk visualisasi interaktif peta
library(ggplot2) # untuk visualisasi plot grafik

# Data Geospatial
library(raster) # untuk read data raster
library(osmdata) # untuk mendapatkan data polygon dari open street map
library(sf) # untuk manipulasi dan analisis data spasial
library(sp) # untuk manipulasi dan analisis data spasial
library(rgdal) # untuk membaca dan menulis data geospatial dalam format yang berbeda (shp)
library(terra) # untuk analisis data spasial dan raster yang lebih kompleks
library(maps) # untuk membuat peta dasar dalam berbagai proyek visualisasi geografis

# Day 3 (Data Visualization)
# library(rayshader) # untuk visualisasi data spatial 3D

2 Geospatial in R

Materi utama yang akan kita kerjakan yakni mengenai Geospatial Data Visualization. Kita akan mengeksplor bagaimana caranya menggunakan data spatial di R untuk membuat sebuat output yang populer seperti peta baik itu statik maupun interaktif hingga pembuatan peta 3 Dimensi.

Sebelum berangkat lebih jauh dalam membuat visualisasi berupa peta dengan data spasial, kita perlu memahami : 1. Dasar-Dasar GIS (Sistem Informasi Geografis): data geospasial, koordinat, struktur data 2. Leaflet: memahami apa itu leaflet, kegunaan, hingga cara implementasi 3. Mempersiapkan data Geospatial sebelum digunakan: memahami format-format

Analisis Geospasial dan pemetaan adalah bidang yang berkembang pesat. Dalam tahap ini, kita akan mempelajari tentang Leaflet, sebuah pustaka JavaScript untuk membuat peta interaktif, dan bagaimana menggunakannya di R sebelum kita membuat peta yang lebih bagus menggunakan data asli spatial topografi. Data Spatial

3 Data Geospasial

Data geospasial adalah bentuk data yang sangat penting dalam ilmu geografi, ilmu lingkungan, pemetaan, dan banyak bidang lainnya. Data geospasial memungkinkan kita untuk merepresentasikan dan menganalisis dunia nyata dengan cara yang lebih terstruktur. Dalam pemrosesan data geospasial, kita dapat memanfaatkan dua jenis utama data: data vektor dan data raster.

Data geospasial memberikan wawasan yang penting dalam pemahaman dunia kita, dan kemampuan untuk menggabungkan lokasi, atribut, dan informasi temporal membuatnya sangat berharga dalam pemodelan, analisis, dan pengambilan keputusan.

Library terra adalah alat yang kuat untuk bekerja dengan data geospasial, membantu kita menjelajahi dan memahami dunia dengan lebih baik. Library terra juga sangat berguna untuk mengolah data raster. Ini memungkinkan kita untuk memanipulasi data raster, menerapkan analisis spasial, dan membuat visualisasi berbasis raster.

3.1 Data Vektor

Data Vektor: Data vektor adalah jenis data geospasial yang merepresentasikan objek sebagai titik, garis, atau poligon. Data vektor terdiri dari tiga komponen utama:

  • Lokasi (Geometri): Ini adalah informasi tentang di mana objek atau fitur tersebut berada di permukaan bumi, seperti koordinat geografis (lintang dan bujur).

  • Atribut: Atribut adalah informasi tentang karakteristik objek tersebut, misalnya nama, jenis, ukuran, dan sebagainya.

  • Temporal: Beberapa data vektor juga dapat mencakup informasi waktu, seperti kapan objek tersebut dibuat atau berubah.

3.1.1 Representasi titik

Geometri titik terdiri dari satu titik sudut (X, Y dan opsional Z).

# Run Code Below:
# Koordinat titik stasiun
lon <- c(-116.8, -114.2, -112.9, -111.9, -114.2, -115.4, -117.7)
lat <- c(41.3, 42.9, 42.4, 39.8, 37.6, 38.3, 37.6)

# Data stasiun dalam bentuk matriks
stasiun_crh <- cbind(lon, lat)
stasiun_crh
#>         lon  lat
#> [1,] -116.8 41.3
#> [2,] -114.2 42.9
#> [3,] -112.9 42.4
#> [4,] -111.9 39.8
#> [5,] -114.2 37.6
#> [6,] -115.4 38.3
#> [7,] -117.7 37.6

Kesalahan umum: Jangan sampai salah penempatan antara longitude (bujur) dan latitude (lintang). Karena, penempatan yang salah ini dapat mengakibatkan interpretasi yang salah terhadap data geografis Anda.

Pada umumnya, dalam representasi geografis, latitude (lintang) digunakan untuk mengukur posisi relatif utara-selatan di bola bumi, sementara longitude (bujur) digunakan untuk mengukur posisi relatif timur-barat. Dalam sebagian besar peta, sumbu vertikal atau garis meridian (garis vertikal yang menghubungkan Kutub Utara dan Kutub Selatan) biasanya digunakan untuk menggambarkan latitude, sementara sumbu horizontal atau garis ekuator (garis horizontal yang mengelilingi bola bumi secara horizontal) digunakan untuk menggambarkan longitude.

Kita bisa menggunakan fungsi plot() untuk menampilkan tampilan data vektor tersebut secara langsung.

## Your Code Here
plot(stasiun_crh)

# Tampilan alas peta agar lebih rapih
plot(stasiun_crh,
     main = "Peta Stasiun Curah Hujan", 
     xlab = "Longitude",
     ylab = "Latitude")

# Plot alas peta
plot(stasiun_crh,
     main = "Peta Stasiun Curah Hujan", 
     xlab = "Longitude",
     ylab = "Latitude")

# Menambahkan titik pada koordinat stasiun
points(stasiun_crh,
       cex = 1, # kode bentuk poin
       pch = 18,
       col = "black")

3.1.2 Representasi Polyline/Garis

Untuk menampilkan garis, secara mudah kita hanya perlu titik-titik koordinat. Geometri poliline terdiri dari dua atau lebih simpul yang membentuk garis saling terhubung.

# Plot peta
plot(stasiun_crh,
     main = 'Peta Stasiun Curah Hujan',
     xlab = 'Longitude',
     ylab = 'Latitude')

# Menambahkan polyline dengan warna yang lebih menarik dan lebih tebal
lines(stasiun_crh, 
      col = "orange", 
      lwd = 3 )

3.1.3 Representasi Poligon

Geometri poligon terdiri dari setidaknya empat simpul yang membentuk suatu area tertutup. Simpul pertama dan terakhir selalu berada pada tempat yang sama.

# Plot peta
plot(stasiun_crh,
     main = 'Peta Stasiun Curah Hujan',
     xlab = 'Longitude',
     ylab = 'Latitude')

# Menambahkan polygon sebagai latar belakang dengan warna yang lebih menarik
polygon(stasiun_crh,
        col = '#FFA07A',
        border = '#FF6347')

3.1.4 Tampilan Data Vektor (Gabungan)

# Plot peta Secara keseluruhan data vektor: titik, garis, area/poligon
plot(stasiun_crh,
     main = 'Peta Stasiun Curah Hujan',
     xlab = 'Longitude',
     ylab = 'Latitude')

# Menambahkan polygon sebagai latar belakang dengan warna yang lebih menarik
polygon(stasiun_crh, col ='#FFA07A', border ='#FF6347')

# Menambahkan polyline dengan warna yang lebih menarik dan lebih tebal
lines(stasiun_crh, col = 'darkred', lwd = 3)

# Menambahkan titik pada koordinat stasiun dengan warna oranye tua
points(stasiun_crh, cex = 2, pch = 20, col = 'black')

# Menambahkan label pada titik stasiun dengan warna biru
text(stasiun_crh, labels = 1:7, pos = 3, offset = 0.5, col = 'blue', cex = 0.8)

Note: urutan data yang ditampilkan pada plot menggunakan library terra diatas tidak seperti layering ggplot. Namun, data yang mau ditampilkan paling atas justru ditaruh pada kode paling akhir.

Dalam kode di atas, kita menggunakan fungsi text() sebagai tambahan untuk menambahkan label nama kota ke dalam plot. Fungsi text() memerlukan tiga argumen utama:

  1. x: Objek vektor geospasial yang akan digunakan sebagai referensi untuk menempatkan teks (dalam hal ini, stasiun_crh).

  2. labels: Vektor yang berisi label atau nama yang ingin Anda tambahkan ke plot (dalam hal ini, 1 sampai 7).

  3. pos: Posisi teks relatif terhadap titik referensi. Di sini, pos = 3 berarti teks akan ditempatkan di atas titik referensi.

  4. Dengan menggunakan fungsi text(), kita dapat menambahkan label nama kota ke plot objek vektor geospasial kita.

# Menampilkan sistem referensi koordinat menggunakan crs()
crs(stasiun_crh)
#> [1] NA
# Data stasiun dalam bentuk matriks (titik koordinat dari yang sebelumnya)
class(stasiun_crh)
#> [1] "matrix" "array"

Data Vector: Dilengkapi dengan representasi geometris titik, garis, poligon, dan multi-polihibrid. Berikut ini merupakan representasi sederhana dari data spasial berbentuk vektor.

Bagaimana cara merepresentasikan data diatas jika menambahkan atribut lain.

## Run code below
# Data stasiun dalam bentuk matriks (titik koordinat dari yang sebelumnya)
stasiun_crh
#>         lon  lat
#> [1,] -116.8 41.3
#> [2,] -114.2 42.9
#> [3,] -112.9 42.4
#> [4,] -111.9 39.8
#> [5,] -114.2 37.6
#> [6,] -115.4 38.3
#> [7,] -117.7 37.6
# Nama stasiun dari 1:7
nama <- LETTERS[1:7]

# Simulasi data curah hujan (dummy data sebagai atribut)
precip <- c(200, 100, 320, 978, 153, 903, 303)
# Kolom precip (curah hujan)
crh <- cbind(stasiun_crh, nama, precip)
crh
#>      lon      lat    nama precip
#> [1,] "-116.8" "41.3" "A"  "200" 
#> [2,] "-114.2" "42.9" "B"  "100" 
#> [3,] "-112.9" "42.4" "C"  "320" 
#> [4,] "-111.9" "39.8" "D"  "978" 
#> [5,] "-114.2" "37.6" "E"  "153" 
#> [6,] "-115.4" "38.3" "F"  "903" 
#> [7,] "-117.7" "37.6" "G"  "303"

Jadi, secara keseluruhan, kode tersebut menghasilkan vektor precip yang berisi data curah hujan simulasi dengan angka-angka acak yang telah diolah agar memiliki sifat yang mirip dengan data curah hujan (dummy data).

Peta lokasi titik-titik tidak berbeda jauh dari plot dasar pada umumnya (x,y). Namun, pada kasus ini titik-titik tersebut sebanding dengan nilai jumlah curah hujan yang dimiliki (pada data precip).

## Run Code Below:
# Ukuran titik berdasarkan curah hujan (lebih besar curah hujan, lebih besar titiknya)
psize <- 1 + precip/100

# Plot peta dengan warna yang lebih menarik
plot(crh,
     cex = psize, # ukuran
     col = "darkblue" , # warna titik (jika tidak pakai pch maka hanya border saja)
     pch = 20, # Jenis titik
     main = 'Peta Lokasi Curah Hujan berdasarkan Jumlah Curah Hujannya') # Judul

# Menambahkan nama stasiun pada plot
text(stasiun_crh, nama, pos = 3, col = 'orange')

# Membuat legenda
breaks <- c(100, 250, 500, 1000)
legend.psize <- 1 + breaks / 500

legend(
  "topright",
  legend = breaks,
  pch = 20,
  pt.cex = legend.psize,
  col = 'darkblue',
  bg = 'white'
)

Note:

Tidak ada kode khusus yang harus Anda gunakan untuk menentukan psize (ukuran titik) berdasarkan nilai precip (curah hujan).

Cara Anda menghitung psize dalam kode yang Anda bagikan, yaitu psize <- 1 + precip/200, adalah cara yang umum digunakan untuk menyesuaikan ukuran titik berdasarkan data numerik.

Di dalam rumus tersebut: - 1 adalah ukuran dasar titik.

  • precip adalah nilai curah hujan.

  • 200 adalah faktor yang mengontrol seberapa besar perbedaan ukuran titik berdasarkan nilai curah hujan. Semakin besar faktor ini, semakin besar perbedaan ukuran titik.

Kita dapat mengubah rumus ini sesuai dengan preferensi. Misalnya, jika ingin membuat perbedaan ukuran yang lebih besar, kita dapat meningkatkan faktor pembagi (misalnya, 1000), dan sebaliknya.

Contoh lain:

  • psize <- 1 + precip/1000 akan menghasilkan titik yang lebih kecil untuk curah hujan yang lebih tinggi.

  • psize <- 1 + sqrt(precip)/10 akan menghasilkan titik yang lebih besar untuk curah hujan yang lebih tinggi dengan menggunakan akar kuadrat.

Anda dapat menyesuaikan rumus diatas sesuai dengan preferensi untuk menentukan ukuran titik berdasarkan data curah hujan.

3.2 Data Raster

Data Raster: Data raster adalah sel berpiksel atau berkisi yang direpresentasikan sebagai baris dan kolom. Ini adalah data berpiksel (atau berkisi) yang setiap pikselnya dikaitkan dengan lokasi geografis tertentu. Raster geospasial hanya berbeda dengan foto digital karena disertai dengan informasi spasial yang menghubungkan data ke lokasi tertentu. Raster adalah foto udara digital, citra dari satelit, gambar digital.

Ini adalah situs web untuk memahami dengan contoh bagaimana data raster adalah data geospasial

Kumpulan data raster berpotensi sangat besar. Resolusi meningkat seiring dengan mengecilnya ukuran sel; namun, biasanya biaya juga meningkat baik pada ruang disk maupun kecepatan pemrosesan.

Data raster adalah salah satu jenis data geospasial yang sangat penting. Ini adalah representasi dari permukaan yang dibagi menjadi sel berpiksel atau berkisi, dengan setiap piksel memiliki nilai yang mewakili atribut atau fenomena di lokasi geografis tertentu. Berikut ini penjelasan tentang contoh kode dan materi yang Anda bagikan:

  1. Membuat Data Raster:
    • Pada contoh kode berikut, kita menggunakan fungsi rast dari library terra untuk membuat objek data raster.
    • ncol dan nrow adalah argumen yang menentukan jumlah kolom dan baris pada data raster.
    • xmin, xmax, ymin, dan ymax digunakan untuk menentukan batas-batas geografis data raster.
# Run code below:
r <- rast(ncol = 5,
          nrow = 5,
          xmin = -150,
          xmax = -80,
          ymin = 20,
          ymax = 60)
r
#> class       : SpatRaster 
#> dimensions  : 5, 5, 1  (nrow, ncol, nlyr)
#> resolution  : 14, 8  (x, y)
#> extent      : -150, -80, 20, 60  (xmin, xmax, ymin, ymax)
#> coord. ref. : lon/lat WGS 84 (CRS84) (OGC:CRS84)

rast() -> untuk mengubah nilai-nilai piksel diatas menjadi sebuah nilai piksel untuk membentuk data raster

  1. Memberikan Nilai Piksel:
    • Setelah membuat objek data raster, kita menggunakan fungsi values untuk memberikan nilai pada piksel-piksel di dalamnya.
    • Pada contoh pertama, kita mengisi nilai piksel dengan bilangan acak antara 0 dan 1 menggunakan runif.
    • Pada contoh kedua, kita mengisi nilai piksel dengan urutan nilai dari 1 hingga jumlah sel (ncell) dalam data raster.
# Memberikan nilai pada piksel value
set.seed(99)
values(r) <- runif(ncell(r))
values(r) <- 1:ncell(r)
  1. Visualisasi Data Raster:
    • Terakhir, gunakan fungsi plot untuk memvisualisasikan data raster.
    • Kita juga bisa menentukan palet warna yang sesuai dengan menggunakan argumen col. Dalam contoh ini, kita akan menggunakan palet warna terrain.colors(25).
# Visualisasi data raster dengan palet warna yang sesuai
plot(r, col = terrain.colors(25))

Hasil dari kode ini adalah data raster yang berisi piksel-piksel dengan nilai-nilai yang telah kita tentukan, dan visualisasi yang menunjukkan representasi grafis dari data tersebut dengan palet warna yang sesuai.

Data raster sangat berguna dalam berbagai aplikasi, seperti pemetaan cuaca, penginderaan jauh, pemodelan lingkungan, dan banyak lagi. Mereka memungkinkan kita untuk menganalisis fenomena yang berubah-ubah di seluruh permukaan bumi dengan tingkat detail yang beragam, tergantung pada resolusi raster.

4 Coordinate Reference Systems (CRS)

Sistem Referensi Koordinat (CRS) yang mendefinisikan bagaimana elemen spasial data berhubungan dengan permukaan bumi (atau benda lain). Ini seperti kita memadatkan permukaan bumi yang bulat menjadi peta yang datar.

Pentingnya CRS dalam data geospasial adalah agar kita bisa:

  1. Mengukur dengan Tepat: Jika kita ingin mengukur jarak atau luas di peta, kita harus tahu bagaimana skala pengukuran ini diubah dari bentuk asli bumi yang bulat.

  2. Pemetaan: CRS membantu kita menggambarkan peta dengan benar, karena setiap peta mungkin memiliki caranya sendiri untuk merubah permukaan bumi.

  3. Integrasi Data: Ketika kita menggabungkan data dari berbagai sumber, semua data ini harus menggunakan CRS yang sama agar bisa digunakan bersama.

  4. Georeferensi: Ini berarti mengaitkan koordinat dunia nyata dengan lokasi di peta, yang hanya bisa dilakukan jika kita tahu CRS yang digunakan.

Komponen Penting: Sebuah CRS umumnya terdiri dari beberapa komponen penting: 1. Metode Proyeksi: Ini menentukan metode matematika yang digunakan untuk mengubah permukaan Bumi menjadi datar. Proyeksi umum meliputi Mercator, Lambert Conformal Conic, dan Albers Equal Area.

  1. Datum: Sebuah datum menentukan titik referensi dan orientasi sistem koordinat. Datum yang berbeda digunakan untuk berbagai bagian dunia.

  2. Satuan: Ini menentukan satuan pengukuran yang digunakan untuk jarak, seperti meter, kaki, derajat, atau satuan lainnya.

  3. Titik Asal: Beberapa proyeksi memiliki titik tertentu di permukaan Bumi sebagai titik asal mereka.

  4. Garis Bujur Pusat: Ini sering digunakan dalam proyeksi untuk menentukan garis bujur pusat peta.

Semua komponen ini bekerja bersama-sama untuk menggambarkan lokasi dan bentuk objek di dunia nyata ke dalam sistem koordinat yang bisa digunakan dalam analisis dan pembuatan peta.

Jadi, kesimpulannya, CRS adalah cara kita membuat peta yang akurat dan melakukan berbagai analisis berdasarkan lokasi. Yang penting, kita harus memilih CRS yang sesuai untuk setiap proyek berdasarkan kebutuhan dan daerah yang akan dipetakan.

Ilustrasi Proyeksi Peta

Dalam peta, biasanya kita menggunakan sistem koordinat geografis yang terdiri dari garis bujur (longitude) dan garis lintang (latitude) untuk menunjukkan lokasi suatu tempat di permukaan bumi. Namun, dalam konteks sistem koordinat X-Y, kita menggantinya dengan sumbu X dan Y untuk menyatakan lokasi.

  1. Garis Bujur (Longitude):
    • Garis bujur adalah garis imajiner yang berjalan dari Kutub Utara ke Kutub Selatan melalui pusat Bumi.
    • Dalam sistem koordinat X-Y, garis bujur biasanya diwakili oleh sumbu X. Sumbu X akan menggambarkan posisi secara horizontal dari barat ke timur.
    • Nilai-nilai positif di sumbu X akan mewakili garis bujur di sebelah timur garis meridian nol (0°), yang biasanya berada di Greenwich, London. Nilai-nilai negatif akan mewakili garis bujur di sebelah barat garis meridian nol.
  2. Garis Lintang (Latitude):
    • Garis lintang adalah garis imajiner yang berjalan sejajar dengan garis ekuator dan berpotongan tegak lurus dengan garis bujur.
    • Dalam sistem koordinat X-Y, garis lintang biasanya diwakili oleh sumbu Y. Sumbu Y akan menggambarkan posisi secara vertikal dari selatan ke utara.
    • Nilai-nilai positif di sumbu Y akan mewakili garis lintang di utara garis ekuator (0°). Nilai-nilai negatif akan mewakili garis lintang di selatan garis ekuator.

Contoh: - Jika Anda memiliki koordinat X = 45 dan Y = -30, itu akan menunjukkan suatu lokasi di sebelah timur garis bujur 45° dan di selatan garis lintang 30°. - Jika Anda memiliki koordinat X = -75 dan Y = 10, itu akan menunjukkan suatu lokasi di sebelah barat garis bujur 75° dan di utara garis lintang 10°.

Penting untuk dicatat bahwa sistem koordinat X-Y ini hanya digunakan dalam konteks peta yang sudah diberikan dengan proyeksi tertentu, dan penggunaannya lebih umum dalam pemetaan dan ilmu geospasial. Dalam pemetaan dunia nyata, koordinat geografis (garis bujur dan garis lintang) masih lebih umum digunakan.

4.1 Sistem koordinat geografis

Sistem koordinat geografis mengidentifikasi lokasi mana pun di permukaan bumi menggunakan dua nilai — garis bujur dan garis lintang. Bujur adalah letaknya yang berarah Timur-Barat pada jarak sudut dari bidang Meridian Utama. Lintang adalah jarak sudut Utara atau Selatan bidang ekuator. Oleh karena itu, jarak dalam CRS geografis tidak diukur dalam meter.

Permukaan bumi dalam sistem koordinat geografis diwakili oleh permukaan bola atau ellipsoidal. Ellipsoid adalah bagian dari komponen CRS yang lebih luas: datum . Ini berisi informasi tentang ellipsoid apa yang digunakan dan hubungan yang tepat antara koordinat Cartesian dan lokasi di permukaan bumi. Ada dua jenis datum — geosentris (misalnya WGS84) dan lokal (misalnya NAD83).

Source:[DataCarpentry](https://datacarpentry.org/)

Source:DataCarpentry

4.2 Proyeksi sistem referensi koordinat

Sistem proyeksi adalah cara yang lebih praktis untuk melakukan perhitungan dan sangat penting untuk membuat peta. Sistem referensi ini disebut “proyeksi” karena mengubah koordinat sudut 3D menjadi sistem datar (planar). Beberapa contoh proyeksi yang umum digunakan adalah UTM, Mercator, dan lainnya.

Ada tiga kelompok utama jenis proyeksi - berbentuk kerucut, silindris, dan planar (azimut). Dalam proyeksi kerucut, permukaan bumi diproyeksikan ke dalam kerucut sepanjang satu garis singgung atau dua garis singgung.

4.2.1 Contoh Implementasi Definisi Koordinat

Data titik koordinat curah hujan x dan y diatas tadi masih belum memiliki koordinat referensi karena masih dalam format matrix, sehingga perlu kita define masih menggunakna library terra. Dalam kasus ini, Kita telah menggunakan proyeksi +proj=longlat +datum=WGS84 untuk mendefinisikan koordinat referensi sebagai koordinat geografis WGS84, yang sangat umum digunakan.

Ini adalah langkah-langkah yang diperlukan untuk memberikan koordinat referensi ke objek data vektor geospasial di paket terra. Dengan koordinat referensi yang sudah ditentukan, Kita dapat melakukan analisis geospasial yang lebih akurat dan visualisasi yang tepat pada peta.

# Definisi koordinat referensi
coor_ref <- "+proj=longlat +datum=WGS84"

#  Buat objek data vektor
titik_crh <- vect(stasiun_crh, crs = coor_ref)

# Menampilkan objek vektor dengan atribut curah hujan
crs(titik_crh)
#> [1] "GEOGCRS[\"unknown\",\n    DATUM[\"World Geodetic System 1984\",\n        ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n            LENGTHUNIT[\"metre\",1]],\n        ID[\"EPSG\",6326]],\n    PRIMEM[\"Greenwich\",0,\n        ANGLEUNIT[\"degree\",0.0174532925199433],\n        ID[\"EPSG\",8901]],\n    CS[ellipsoidal,2],\n        AXIS[\"longitude\",east,\n            ORDER[1],\n            ANGLEUNIT[\"degree\",0.0174532925199433,\n                ID[\"EPSG\",9122]]],\n        AXIS[\"latitude\",north,\n            ORDER[2],\n            ANGLEUNIT[\"degree\",0.0174532925199433,\n                ID[\"EPSG\",9122]]]]"
class(stasiun_crh)
#> [1] "matrix" "array"
class(titik_crh)
#> [1] "SpatVector"
#> attr(,"package")
#> [1] "terra"
plot(stasiun_crh)

plot(titik_crh)

Berikut adalah penjelasan singkat tentang langkah-langkah diatas:

  1. Mendefinisikan koordinat referensi dengan menggunakan string "+proj=longlat +datum=WGS84", yang mendefinisikan proyeksi geografis dan datum sebagai WGS84.

  2. Membuat objek data vektor geospasial titik_crh dari koordinat stasiun_crh dengan menentukan crs (koordinat referensi) yang telah Anda definisikan sebelumnya yakni coor_ref.

  3. Kemudian, memeriksa objek data vektor geospasial titik_crh untuk memastikan bahwa koordinat referensinya telah ditambahkan dengan benar.


5 Mambaca data spasial

5.1 Jenis-Jenis Data Geospasial

  • Terdapat berbagai jenis data geospasial yang digunakan untuk merepresentasikan informasi geografis. Beberapa jenis data geospasial yang umum meliputi:
    • Shapefile: Format file vektor yang sangat umum digunakan dalam pemetaan dan sistem informasi geografis (SIG).
    • GeoJSON: Format file vektor berbasis JSON yang populer untuk pertukaran data geospasial.
    • Raster: Representasi data dalam bentuk kisi piksel, seperti citra satelit atau peta tematik.
    • KML: Format file yang digunakan untuk pertukaran data geospasial dan digunakan dalam Google Earth.
    • TopoJSON: Format file yang mengurangi ukuran data geospasial untuk pengiriman dan pengolahan yang lebih efisien.

5.2 Membaca shapefile

Ada banyak format data yang dapat digunakan untuk menyimpan data spasial. KML, GeoJSON, GeoTIFF, Tab File, adalah beberapa format umum yang mungkin pernah Anda temui. Namun, format yang paling umum digunakan dalam pemetaan sistem informasi geografis adalah Shapefile.

Shapefile adalah standar universal format geospasial yang dikembangkan dan diatur oleh Esri, penyedia perangkat lunak sistem informasi geografis internasional. Format ini kemudian diadopsi oleh banyak bahasa pemrograman, termasuk R.

Nama Shapefile mungkin sedikit menyesatkan karena file ini umumnya terdiri dari beberapa file terpisah:

  • .shp (wajib): berisi data geometri.
  • .shx (wajib): berisi data indeks yang digunakan untuk mengidentifikasi geometri yang berbeda.
  • .dbf (wajib): berisi informasi atribut (tabel dengan info lebih lanjut tentang setiap fitur).
  • .prj berisi informasi tentang sistem koordinat referensi.

Selain file yang tercantum di atas, sebuah shapefile dapat mencakup komponen file lainnya. Daftar komponen shapefile yang komprehensif dapat diakses di sini.

5.2.1 Membaca shapefile (inageoportal)

Untuk kasus ini, saya telah menyediakan shapefile untuk mengakses dan mendownload data SHAPEFILE (shp) dari portal Tanah Air Indonesia. Langkah unduh bisa dilihat pada: Slide Share

Mari baca file menggunakan fungsi st_read() dari paket sf:

# Read data:
adm_bantul <- st_read("dataset/Kec_Bantul/kec_bantul.shp")
#> Reading layer `kec_bantul' from data source 
#>   `G:\.shortcut-targets-by-id\1FTbbgwnziVLbh9FmdLQKPpBRj8YZM3S8W_1ZFLHbD_Q_7wplA14rvafhLAsLZ7P7GWJebjlB\DSS  Geospatial Data Visualization with Rayshader In R Data Science Series\dataset\Kec_Bantul\kec_bantul.shp' 
#>   using driver `ESRI Shapefile'
#> Simple feature collection with 17 features and 5 fields
#> Geometry type: POLYGON
#> Dimension:     XY
#> Bounding box:  xmin: 110.2045 ymin: -8.028906 xmax: 110.5213 ymax: -7.76771
#> Geodetic CRS:  WGS 84

Ada beberapa informasi yang disimpan dalam geometri sf:

  • Geometry Type/Jenis Geometri: Ada tujuh jenis geometri paling umum dalam fitur sederhana: POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON dan GEOMETRYCOLLECTION.
  • Dimension/Dimensi: Mengacu pada ruang 2-(XY), 3-(XYZ/XYM) atau 4 dimensi (XYZM).
  • Bbox (Bounding Box): area yang ditentukan oleh dua garis bujur dan dua garis lintang.
  • CRS: Sistem Referensi Koordinat.

sf merupakan singkatan dari “Simple Features” yang merepresentasikan data sebagai catatan dalam sebuah data.frame atau tibble dengan sebuah kolom list geometri1. Simple Features adalah model data hierarkis yang mewakili berbagai jenis geometri. Dari 17 jenis geometri yang didukung oleh spesifikasi, hanya 7 yang digunakan dalam sebagian besar penelitian geografis:

Jika kita menggunakan fungsi class() untuk objek adm_bantul yang baru dibuat, kita dapat melihat bagaimana kelas sf mengelola data spasial dengan cara yang mirip dengan struktur data tabel biasa; dengan menyimpannya sebagai data frame:

## Your code here
class(adm_bantul)
#> [1] "sf"         "data.frame"

Perbedaan utama antara sebuah data frame biasa dengan sebuah objek sf adalah bahwa objek sf memiliki kolom geometry yang menjelaskan di mana fitur tersebut terletak di Bumi, dan mereka memiliki atribut, yang menjelaskan properti lainnya:

## Your code here
adm_bantul

POLYGON:

  • Tipe geoometri: Ini adalah atribut yang berkaitan dengan data vektor berupa poligon (POLYGON).
  • Dimension Geometri jenis POLYGON dengan dimensi XY (2D).
  • Bbox (Bounding box / kotak pembatas) menunjukkan kotak yang mencakup seluruh poligon dalam data tersebut dalam koordinat geografis.
  • CRS adalah “WGS 84” yang juga mengindikasikan sistem referensi koordinat geografis WGS 84.

Untuk mendapatkan gambaran yang lebih baik tentang informasi geometry dalam objek sf, mari kita lanjutkan dan plot adm_bantul$geometry menggunakan fungsi plot():

## Your code here
plot(adm_bantul$geometry)


5.2.2 Membaca shapefile (GADMTools)

Data spasial vector untuk Indonesia selain bisa didapatkan melalui inageoportal, kita bisa menggunakan library GADMTools dimana GADM sudah menyediakan data spasial vektor dalam 4 level ketelitian, namun pada course ini kita akan coba lihat dalam 3 level:

  • Provinsi
  • Kabupaten/Kota
  • Kecamatan

Tip Ekstra:
Anda juga dapat mengakses basis data GADM langsung dari R dengan bantuan pustaka GADMTools:

# Install requirement packages for packages GADMTools
# install.packages(c('maptools', 'rosm', 'rgeos', 'ggmap', 'ggspatial', 'prettymapr'))

# Install Packages GADMTools
# install.packages("https://cran.r-project.org/src/contrib/Archive/GADMTools/GADMTools_3.9-1.tar.gz", repos = NULL, type = "source")

Pada bagian code dibawah ini, tidak perlu menjalankan read object map dikarenakan isi darinya sudah kami unduh dan sedikit filter berdasarkan level 2 saja pada folder shp.

# Code example to load Indonesia's spatial vector in Kabupaten/Kota level  
# library(GADMTools)  # jika masih belum ada, silahkan jalanan kode chunck diatas untuk install packagesnya.

# map <- gadm_sf_loadCountries(c("IDN"), level=2, basefile = "./")

Mari baca file menggunakan fungsi st_read() dari paket sf:

idn <- st_read(dsn = "shp", layer = "idn")
#> Reading layer `idn' from data source 
#>   `G:\.shortcut-targets-by-id\1FTbbgwnziVLbh9FmdLQKPpBRj8YZM3S8W_1ZFLHbD_Q_7wplA14rvafhLAsLZ7P7GWJebjlB\DSS  Geospatial Data Visualization with Rayshader In R Data Science Series\shp' 
#>   using driver `ESRI Shapefile'
#> Simple feature collection with 6694 features and 16 fields
#> Geometry type: MULTIPOLYGON
#> Dimension:     XY
#> Bounding box:  xmin: 95.0097 ymin: -11.00762 xmax: 141.0194 ymax: 6.076941
#> Geodetic CRS:  WGS 84

Cek tipe data/kelas object:

class(idn)
#> [1] "sf"         "data.frame"

Cek atribut:

glimpse(idn)
#> Rows: 6,694
#> Columns: 17
#> $ GID_0     <chr> "IDN", "IDN", "IDN", "IDN", "IDN", "IDN", "IDN", "IDN", "IDN…
#> $ NAME_0    <chr> "Indonesia", "Indonesia", "Indonesia", "Indonesia", "Indones…
#> $ GID_1     <chr> "IDN.1_1", "IDN.1_1", "IDN.1_1", "IDN.1_1", "IDN.1_1", "IDN.…
#> $ NAME_1    <chr> "Aceh", "Aceh", "Aceh", "Aceh", "Aceh", "Aceh", "Aceh", "Ace…
#> $ NL_NAME_1 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
#> $ GID_2     <chr> "IDN.1.2_1", "IDN.1.2_1", "IDN.1.2_1", "IDN.1.2_1", "IDN.1.2…
#> $ NAME_2    <chr> "Aceh Barat", "Aceh Barat", "Aceh Barat", "Aceh Barat", "Ace…
#> $ NL_NAME_2 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
#> $ GID_3     <chr> "IDN.1.2.1_1", "IDN.1.2.2_1", "IDN.1.2.3_1", "IDN.1.2.4_1", …
#> $ NAME_3    <chr> "Arongan Lambalek", "Bubon", "Johan Pahlawan", "Kaway Xvi", …
#> $ VARNAME_3 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
#> $ NL_NAME_3 <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
#> $ TYPE_3    <chr> "Kecamatan", "Kecamatan", "Kecamatan", "Kecamatan", "Kecamat…
#> $ ENGTYPE_3 <chr> "Sub-district", "Sub-district", "Sub-district", "Sub-distric…
#> $ CC_3      <chr> "1107062", "1107061", "1107050", "1107080", "1107081", "1107…
#> $ HASC_3    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
#> $ geometry  <MULTIPOLYGON [°]> MULTIPOLYGON (((95.97953 4...., MULTIPOLYGON ((…

Untuk mendapatkan pemahaman yang lebih baik tentang informasi geometri dalam objek sf, mari lanjutkan dan gambarkan idn$geometry menggunakan fungsi plot():

plot(idn$geometry)

Keuntungan besar penggunaan sf adalah bagaimana setiap fungsi dapat digabungkan menggunakan operator %>% dan berfungsi dengan baik dengan koleksi paket R dari tidyverse, yang memberikan kami kendali yang lebih baik atas informasi geometri dalam objek sf. Misalnya, untuk mengambil subset provinsi tertentu, Anda dapat menggunakan metode filter() seperti yang Anda lakukan dengan data frame biasa:

unique(idn$NAME_1)
#>  [1] "Aceh"                "Bali"                "Bangka Belitung"    
#>  [4] "Banten"              "Bengkulu"            "Gorontalo"          
#>  [7] "Jakarta Raya"        "Jambi"               "Jawa Barat"         
#> [10] "Jawa Tengah"         "Jawa Timur"          "Kalimantan Barat"   
#> [13] "Kalimantan Selatan"  "Kalimantan Tengah"   "Kalimantan Timur"   
#> [16] "Kepulauan Riau"      "Lampung"             "Maluku"             
#> [19] "Maluku Utara"        "Nusa Tenggara Barat" "Nusa Tenggara Timur"
#> [22] "Papua"               "Papua Barat"         "Riau"               
#> [25] "Sulawesi Barat"      "Sulawesi Selatan"    "Sulawesi Tengah"    
#> [28] "Sulawesi Tenggara"   "Sulawesi Utara"      "Sumatera Barat"     
#> [31] "Sumatera Selatan"    "Sumatera Utara"      "Yogyakarta"

Melakukan agregrasi data untuk melakukan filtering langsung dari data idn untuk mendapatkan shp dengan area sesuai dengan kebutuhan, mari kita coba untuk mengambil provinsi Bali:

# Code here
bali_prov <- idn %>% 
  filter(NAME_1 == "Bali")

plot(bali_prov$geometry)

bali_kab <- idn %>% 
  filter(NAME_1 == "Bali") %>% 
  group_by(NAME_2) %>% 
  summarise()

plot(bali_kab$geometry)

Dive deeper:

Silahkan untuk coba melakukan pengambilan shp pada daerah Kabupaten Bantul menggunakan library GADM.

# Type Your Code here
bantul_adm <- idn %>% 
  filter(NAME_2 == "Bantul") %>% 
  group_by(NAME_3) %>% 
  summarise()

plot(bantul_adm$geometry)

6 Studi Kasus: Peta Tematik Kepadatan Penduduk

🗺️ Pembuatan Peta Tematik

Secara umum, data spasial dapat direpresentasikan sebagai peta referensi atau peta tematik. Sementara peta referensi menekankan lokasi objek di dunia, peta tematik menunjukkan variabilitas spasial dari distribusi tertentu. Peta distribusi harga rumah yang telah kita buat sebelumnya adalah salah satu jenis peta tematik yang paling sering digunakan dalam data geospasial, yang disebut peta Choropleth.

Menggunakan data shp Kecamatan Bantul

# cek keseluruhan data shp
plot(adm_bantul)

glimpse(adm_bantul)
#> Rows: 17
#> Columns: 6
#> $ fid       <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
#> $ ogc_fid   <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
#> $ desa      <chr> "Tirtohargo", "Argodadi", "Gadingharjo", "Sidomulyo", "Catur…
#> $ kecamatan <chr> "Kretek", "Sedayu", "Sanden", "Bambanglipuro", "Pandak", "Sr…
#> $ kabupaten <chr> "Bantul", "Bantul", "Bantul", "Bantul", "Bantul", "Bantul", …
#> $ geometry  <POLYGON [°]> POLYGON ((110.3166 -7.98874..., POLYGON ((110.2767 -7.83451.…
adm_bantul$kecamatan
#>  [1] "Kretek"        "Sedayu"        "Sanden"        "Bambanglipuro"
#>  [5] "Pandak"        "Srandakan"     "Jetis"         "Sewon"        
#>  [9] "Banguntapan"   "Pundong"       "Imogiri"       "Kasihan"      
#> [13] "Bantul"        "Pleret"        "Piyungan"      "Dlingo"       
#> [17] "Pajangan"
# hanya plot polygon adm nya saja berdasarkan kolom geometry
plot(adm_bantul$geometry)

crs(adm_bantul)
#> [1] "GEOGCRS[\"WGS 84\",\n    DATUM[\"World Geodetic System 1984\",\n        ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n            LENGTHUNIT[\"metre\",1]]],\n    PRIMEM[\"Greenwich\",0,\n        ANGLEUNIT[\"degree\",0.0174532925199433]],\n    CS[ellipsoidal,2],\n        AXIS[\"geodetic latitude (Lat)\",north,\n            ORDER[1],\n            ANGLEUNIT[\"degree\",0.0174532925199433]],\n        AXIS[\"geodetic longitude (Lon)\",east,\n            ORDER[2],\n            ANGLEUNIT[\"degree\",0.0174532925199433]],\n    ID[\"EPSG\",4326]]"

Melakukan penyesuaian koordinat pada object adm_bantul-> menggunakan st_transform()

# Code here
adm_bantul <- st_transform(x = adm_bantul, crs = "EPSG:4326")

Read data kepadatan penduduk Kabupaten Bantul per Kecamatan dalam bentuk .xls menggunakan read_excel():

library(readxl)

kpdt_pddk <- read_excel("dataset/Kec_Bantul/kpdt.xls")
kpdt_pddk
# Join csv dengan shp
kpdt_bantul <- adm_bantul %>%
  left_join(kpdt_pddk, by = c("kecamatan" = "kecamatan")) %>% 
  arrange(kecamatan)

glimpse(kpdt_bantul)
#> Rows: 17
#> Columns: 7
#> $ fid       <int> 4, 9, 13, 16, 11, 7, 12, 1, 17, 5, 15, 14, 10, 3, 2, 8, 6
#> $ ogc_fid   <dbl> 4, 9, 13, 16, 11, 7, 12, 1, 17, 5, 15, 14, 10, 3, 2, 8, 6
#> $ desa      <chr> "Sidomulyo", "Jambidan", "Palbapang", "Dlingo", "Selopamioro…
#> $ kecamatan <chr> "Bambanglipuro", "Banguntapan", "Bantul", "Dlingo", "Imogiri…
#> $ kabupaten <chr> "Bantul", "Bantul", "Bantul", "Bantul", "Bantul", "Bantul", …
#> $ kpdt_pddk <dbl> 1850.75, 4460.29, 3015.13, 716.48, 1187.06, 2474.83, 3622.21…
#> $ geometry  <POLYGON [°]> POLYGON ((110.2846 -7.93789..., POLYGON ((110.4281 -7.84666.…
plot(kpdt_bantul)


END OF DAY 2 ___

6.1 Membuat Peta di R

6.1.1 Membuat Peta dengan Library ggplot2

# Code here
ggplot(kpdt_bantul)+ # add base canvas
  geom_sf() # plot the geometry

6.1.2 Membuat Peta dengan Library leaflet

# Leaflet
library(leaflet)
library(BAMMtools) # untuk menghitung pembingkaian data (jenks breaks)

Persiapan visualisasi:

# Mendefinisikan Label Pop-up:
labels <- sprintf("<strong>%s</strong><br/>%g penduduk / km<sup>2</sup>",
  kpdt_bantul$kecamatan, kpdt_bantul$kpdt_pddk) %>% lapply(FUN = htmltools::HTML)

# Mendefinisikan Warna:
col <- kpdt_bantul$kpdt_pddk

# kategorisasi variabel kepadatan penduduk kedalam 5 kelompok
bins <- c(getJenksBreaks(kpdt_bantul$kpdt_pddk, k = 5))

# melakukan pewarnaan
pal <- colorBin("YlOrRd", 
                domain = col, # variabel yang ingin dipetakan
                bins = bins )

Code Complete:

# Plot Peta:
Bantul <- leaflet(kpdt_bantul) %>%
  # Base groups
  addTiles(group = "OSM (default)") %>%
  addProviderTiles(providers$Stamen.Toner, group = "Toner") %>%
  addProviderTiles(providers$Stamen.TonerLite, group = "Toner Lite") %>%
  addProviderTiles(provider = "OpenTopoMap") %>% 
  
  # Layer Polygon
  addPolygons(fillColor = pal(col), # memberi warna pada poligon sesuai dengan nilai kpdt_pddk
              weight = 2,
              opacity = 1,
              color = "white",
              dashArray = "3",
              fillOpacity = 0.7, 
              highlightOptions = highlightOptions(weight = 5,
                                                  color = "#666",
                                                  dashArray = "",
                                                  fillOpacity = 0.7,
                                                  bringToFront = TRUE),
              label = labels,
              labelOptions = labelOptions(
                style = list("font-weight" = "normal", padding = "3px 8px"),textsize = "15px")) %>% 
  # Legenda peta
  addLegend("bottomright", 
            pal = pal,
            values = ~col,
            title = "Kepadatan Penduduk Kabupaten Bantul",
            labFormat = labelFormat(digits = 2),
            opacity = 1) %>% 
  # Layers control
  addLayersControl(
    baseGroups = c("OSM (default)", "Toner", "Toner Lite", "Open Topo Map"),
    options = layersControlOptions(collapsed = TRUE)
  )
Bantul

Secara umum, data spasial dapat direpresentasikan baik sebagai peta referensi maupun peta tematik. Sementara peta referensi menekankan lokasi objek di dunia, peta tematik menunjukkan variasi spasial dari distribusi tertentu. Peta kepadatan penduduk yang telah kita buat merupakan salah satu jenis peta tematik yang paling sering digunakan dalam dunia geospasial.

Selain fitur sederhana sf, sebenarnya ada metodologi lain untuk menyimpan model fitur geografis ke dalam R. Jika Anda pernah melakukan penelitian geospasial di R, Anda mungkin juga familiar dengan penggunaan paket sp. Sebenarnya, sp adalah paket yang sangat baik dikembangkan sejak tahun 2005 yang praktis mendukung hampir setiap analisis GIS di R, bahkan sampai sekarang.

Masalah utama dari sp adalah kompatibilitasnya yang rendah dengan struktur data frame R. sf dibangun untuk mengisi kesenjangan tersebut. Dirilis pada tahun 2016, sf menggunakan standar OGC (Open Geospatial Consortium) & ISO dalam mencatat dan mengatur data spasial dengan fitur sederhana.

Kerugian dari sf adalah, karena relatif baru, beberapa paket spasial mungkin belum mendukung objek sf. Untungnya, kita masih dapat mengonversi objek sf ke kelas spasial yang digunakan dalam sp:

# Menggunakan data idn dari GADMTools
idn_sp <- as(idn, Class = "Spatial")

class(idn_sp)
#> [1] "SpatialPolygonsDataFrame"
#> attr(,"package")
#> [1] "sp"

Objek spasial dapat dikonversi kembali ke objek sf dengan cara yang sama atau dengan menggunakan fungsi st_as_sf() dari sf:

idn_sf <- st_as_sf(idn_sp)

class(idn_sf)
#> [1] "sf"         "data.frame"

Pada kasus ini kita menggunakan data yang diambil dari GADMTools idn dengan melakukan filter Jakarta Raya saja tanpa mengambil kepulauan seribu.

dki <- idn %>% 
  filter(NAME_1 == "Jakarta Raya" & NAME_2 != "Kepulauan Seribu") # remove kelupauan seribu

plot(dki$geometry)

dki$geometry
#> Geometry set for 43 features 
#> Geometry type: MULTIPOLYGON
#> Dimension:     XY
#> Bounding box:  xmin: 106.6862 ymin: -6.370783 xmax: 106.9728 ymax: -6.089036
#> Geodetic CRS:  WGS 84
#> First 5 geometries:
# Merge
dki_prov <- dki %>% 
  group_by(NAME_1) %>% 
  summarise()

plot(dki_prov$geometry)

head(dki)

6.2 Membaca data Raster format .Tiff

Mirip dengan paket sf , terra juga menyediakan plot() metode untuk kelasnya sendiri. Raster dapat dibuat dari awal menggunakan rast().

gtif <- rast("dataset/DEMNAS_Rinjani.tif")
plot(gtif)

gtif
#> class       : SpatRaster 
#> dimensions  : 3333, 3333, 1  (nrow, ncol, nlyr)
#> resolution  : 0.0000750075, 0.0000750075  (x, y)
#> extent      : 116.25, 116.5, -8.5, -8.25  (xmin, xmax, ymin, ymax)
#> coord. ref. : lon/lat WGS 84 (CRS84) (OGC:CRS84) 
#> source      : DEMNAS_Rinjani.tif 
#> name        : DEMNAS_Rinjani

Bagaimana kita memberikan koordinat pada data yang belum terdefinisasi (seperti data raster)?

R menggunakan PROJ.4 untuk melakukan transformasi CRS (Coordinate Reference System). Namun, dalam beberapa kasus, PROJ.4 mungkin tidak cukup, dan Anda perlu menggunakan kode EPSG. Kode EPSG ini digunakan untuk mendefinisikan proyeksi, datum, dan sejumlah parameter lain yang menggambarkan di mana pusat peta tersebut berada.

Contoh:

gtif_utm = project(gtif, "EPSG:32750")
gtif_utm
#> class       : SpatRaster 
#> dimensions  : 3345, 3331, 1  (nrow, ncol, nlyr)
#> resolution  : 8.275699, 8.275699  (x, y)
#> extent      : 417399.5, 444965.8, 9060347, 9088030  (xmin, xmax, ymin, ymax)
#> coord. ref. : WGS 84 / UTM zone 50S (EPSG:32750) 
#> source(s)   : memory
#> name        : DEMNAS_Rinjani 
#> min value   :      -3.580017 
#> max value   :    3635.024170
plot(gtif_utm)

[Optional] Menghitung luasan area

st_area(dki_prov) # Data Vektor luas area provinsi DKI
#> 645545871 [m^2]
res(gtif_utm) # Data Raster area Bali
#> [1] 8.275699 8.275699

SUMMARY

Mengapa penting melakukan define koordinat pada data spasial?

Pentingnya mendefinisikan koordinat pada data spasial adalah sebagai berikut:

  1. Presisi Lokasi: Mendefinisikan koordinat membantu dalam menentukan lokasi yang tepat dari objek geografis. Ini memungkinkan kita untuk merujuk pada lokasi geografis secara akurat dan menjaga presisi data.

  2. Analisis Spatial: Untuk melakukan analisis spasial, seperti perhitungan jarak, luas area, dan sebagainya, kita perlu menggunakan sistem koordinat yang konsisten. Tanpa sistem koordinat yang terdefinisi, analisis ini akan tidak mungkin dilakukan.

  3. Pemetaan dan Visualisasi: Mendefinisikan koordinat memungkinkan kita untuk membuat peta yang akurat dan visualisasi data geografis dengan benar. Ini membantu dalam pemahaman yang lebih baik tentang pola geografis dan distribusi data.

  4. Kompatibilitas Data: Dalam proyek yang melibatkan beberapa set data geografis yang berbeda, mendefinisikan koordinat adalah langkah penting untuk memastikan bahwa data-data tersebut dapat digabungkan dan diintegrasikan dengan benar.

  5. Pemahaman Terhadap Referensi Geodetik: Mendefinisikan koordinat juga berarti memahami referensi geodetik yang digunakan dalam data tersebut. Ini penting ketika berhubungan dengan data-data geodetik yang diukur di berbagai lokasi di seluruh dunia.

  6. Kepatuhan Standar: Banyak organisasi dan proyek yang memiliki standar spesifik terkait dengan sistem koordinat yang harus digunakan. Mendefinisikan koordinat adalah cara untuk memastikan kepatuhan terhadap standar-standar tersebut.

Dengan mendefinisikan koordinat, kita dapat menggambarkan lokasi objek secara konsisten, melakukan analisis spasial, dan mengintegrasikan data geografis dengan lebih baik, yang semuanya penting dalam berbagai bidang seperti geografi, geologi, ekologi, pemetaan, dan banyak lagi.

Untuk saat ini, cukup mengetahui:

  • Bahwa sistem koordinat merupakan komponen kunci dari objek geografis

  • Mengetahui di CRS mana data Anda berada, dan apakah data tersebut berada dalam geografis (lon/lat) atau proyeksi (biasanya meter), adalah hal yang penting dan memiliki konsekuensi terhadap cara R menangani operasi spasial dan geometri.

  • CRS sf objek dapat dikueri dengan fungsi st_crs(), CRS terra objek dapat dikueri dengan fungsi crs()

7 Reference